/**
 * 应用程序的根模块, 应用app中有controller和service
 * service是服务， app是应用
 * 应用 => 服务
 * 控制器总是属于模块，这就是为什么我们在 @Module() 装饰器中包含 controllers 数组的原因
 */
import {
  Module,
  NestModule,
  MiddlewareConsumer,
  RequestMethod,
} from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
import { LoggerMiddleware } from './common/middleware/logger.middleware';

@Module({
  imports: [CatsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer): any {
    // 1. 包含中间件的模块必须实现NestModule接口
    // 2. 必须使用模块类的configure方法来设置中间件
    consumer.apply(LoggerMiddleware).forRoutes({
      path: 'cats',
      method: RequestMethod.GET,
    });
  }
}
